home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 July: Mac OS SDK / Dev.CD Jul 00 SDK2.toast / Development Kits / Cross Platform / QuickTime 4.1.2 Windows SDK / CIncludes / StringCompare.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-12  |  12.0 KB  |  412 lines  |  [TEXT/R*ch]

  1. /*
  2.      File:        StringCompare.h
  3.  
  4.      Contains:    Public interfaces for String Comparison and related operations
  5.  
  6.      Version:    Technology:    Mac OS 8
  7.                  Release:    QuickTime 4.1
  8.  
  9.      Copyright:    (c) 1985-1999 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __STRINGCOMPARE__
  18. #define __STRINGCOMPARE__
  19.  
  20. #ifndef __MACTYPES__
  21.     #include <MacTypes.h>
  22. #endif
  23.  
  24. #ifndef __TEXTCOMMON__
  25.     #include <TextCommon.h>
  26. #endif
  27.  
  28. #ifndef __SCRIPT__
  29.     #include <Script.h>
  30. #endif
  31.  
  32.  
  33.  
  34.  
  35. #if PRAGMA_ONCE
  36. #pragma once
  37. #endif
  38.  
  39. #ifdef __cplusplus
  40. extern "C" {
  41. #endif
  42.  
  43. #if PRAGMA_IMPORT
  44. #pragma import on
  45. #endif
  46.  
  47. #if PRAGMA_STRUCT_ALIGN
  48.     #pragma options align=mac68k
  49. #elif PRAGMA_STRUCT_PACKPUSH
  50.     #pragma pack(push, 2)
  51. #elif PRAGMA_STRUCT_PACK
  52.     #pragma pack(2)
  53. #endif
  54.  
  55. /*
  56.  
  57.     Here are the current System 7 routine names and the translations to the older forms.
  58.     Please use the newer forms in all new code and migrate the older names out of existing
  59.     code as maintenance permits.
  60.     
  61.     NEW NAME                    OLD NAME                    OBSOLETE FORM (no handle)
  62.     
  63.     CompareString (Str255)        IUCompPString (hp only)        IUCompString (hp only)
  64.     CompareText (ptr/len)        IUMagPString                IUMagString
  65.     IdenticalString (Str255)    IUEqualPString (hp only)    IUEqualString  (hp only)
  66.     IdenticalText (ptr/len)        IUMagIDPString                IUMagIDString
  67.     LanguageOrder                IULangOrder
  68.     ScriptOrder                    IUScriptOrder
  69.     StringOrder (Str255)        IUStringOrder (hp only)
  70.     TextOrder (ptr/len)            IUTextOrder
  71.  
  72.     RelString
  73.     CmpString (a only)                    
  74.     EqualString (hp only)
  75.     
  76.     ReplaceText
  77.  
  78.     Carbon only supports the new names.  The old names are undefined for Carbon targets.
  79.  
  80.     InterfaceLib always has exported the old names.  For C macros have been defined to allow
  81.     the use of the new names.  For Pascal and Assembly using the new names will result
  82.     in link errors. 
  83.     
  84. */
  85.  
  86. enum {
  87.                                                                 /* Special language code values for Language Order*/
  88.     systemCurLang                = -2,                            /* current (itlbLang) lang for system script*/
  89.     systemDefLang                = -3,                            /* default (table) lang for system script*/
  90.     currentCurLang                = -4,                            /* current (itlbLang) lang for current script*/
  91.     currentDefLang                = -5,                            /* default lang for current script*/
  92.     scriptCurLang                = -6,                            /* current (itlbLang) lang for specified script*/
  93.     scriptDefLang                = -7                            /* default language for a specified script*/
  94. };
  95.  
  96. /* obsolete names*/
  97. enum {
  98.     iuSystemCurLang                = systemCurLang,
  99.     iuSystemDefLang                = systemDefLang,
  100.     iuCurrentCurLang            = currentCurLang,
  101.     iuCurrentDefLang            = currentDefLang,
  102.     iuScriptCurLang                = scriptCurLang,
  103.     iuScriptDefLang                = scriptDefLang
  104. };
  105.  
  106.  
  107. /*
  108.  *    Type Select Utils - now public in Carbon
  109.  */
  110.  
  111. typedef SInt16 TSCode;
  112. enum {
  113.     tsPreviousSelectMode        = -1,
  114.     tsNormalSelectMode            = 0,
  115.     tsNextSelectMode            = 1
  116. };
  117.  
  118.  
  119. struct TypeSelectRecord {
  120.     unsigned long                     tsrLastKeyTime;
  121.     ScriptCode                         tsrScript;
  122.     Str63                             tsrKeyStrokes;
  123. };
  124. typedef struct TypeSelectRecord            TypeSelectRecord;
  125. typedef CALLBACK_API( Boolean , IndexToStringProcPtr )(short item, ScriptCode *itemsScript, StringPtr *itemsStringPtr, void *yourDataPtr);
  126. typedef STACK_UPP_TYPE(IndexToStringProcPtr)                     IndexToStringUPP;
  127. EXTERN_API( void )
  128. TypeSelectClear                    (TypeSelectRecord *        tsr)                                THREEWORDINLINE(0x3F3C, 0x0028, 0xA9ED);
  129.  
  130. /*
  131.         Long ago the implementation of TypeSelectNewKey had a bug that
  132.         required the high word of D0 to be zero or the function did not work.
  133.         Although fixed now, we are continuing to clear the high word
  134.         just in case someone tries to run on an older system.
  135.     */
  136. EXTERN_API( Boolean )
  137. TypeSelectNewKey                (const EventRecord *    theEvent,
  138.                                  TypeSelectRecord *        tsr)                                FOURWORDINLINE(0x7000, 0x3F3C, 0x002A, 0xA9ED);
  139.  
  140. EXTERN_API( short )
  141. TypeSelectFindItem                (const TypeSelectRecord * tsr,
  142.                                  short                     listSize,
  143.                                  TSCode                 selectMode,
  144.                                  IndexToStringUPP         getStringProc,
  145.                                  void *                    yourDataPtr)                        THREEWORDINLINE(0x3F3C, 0x002C, 0xA9ED);
  146.  
  147.  
  148. EXTERN_API( short )
  149. TypeSelectCompare                (const TypeSelectRecord * tsr,
  150.                                  ScriptCode             testStringScript,
  151.                                  StringPtr                 testStringPtr)                        THREEWORDINLINE(0x3F3C, 0x002E, 0xA9ED);
  152.  
  153. #if OPAQUE_UPP_TYPES
  154.     EXTERN_API(IndexToStringUPP)
  155.     NewIndexToStringUPP               (IndexToStringProcPtr    userRoutine);
  156.  
  157.     EXTERN_API(void)
  158.     DisposeIndexToStringUPP           (IndexToStringUPP        userUPP);
  159.  
  160.     EXTERN_API(Boolean)
  161.     InvokeIndexToStringUPP           (short                    item,
  162.                                     ScriptCode *            itemsScript,
  163.                                     StringPtr *                itemsStringPtr,
  164.                                     void *                    yourDataPtr,
  165.                                     IndexToStringUPP        userUPP);
  166.  
  167. #else
  168.     enum { uppIndexToStringProcInfo = 0x00003F90 };                 /* pascal 1_byte Func(2_bytes, 4_bytes, 4_bytes, 4_bytes) */
  169.     #define NewIndexToStringUPP(userRoutine)                         (IndexToStringUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppIndexToStringProcInfo, GetCurrentArchitecture())
  170.     #define DisposeIndexToStringUPP(userUPP)                         DisposeRoutineDescriptor(userUPP)
  171.     #define InvokeIndexToStringUPP(item, itemsScript, itemsStringPtr, yourDataPtr, userUPP)  (Boolean)CALL_FOUR_PARAMETER_UPP((userUPP), uppIndexToStringProcInfo, (item), (itemsScript), (itemsStringPtr), (yourDataPtr))
  172. #endif
  173. /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  174. #define NewIndexToStringProc(userRoutine)                         NewIndexToStringUPP(userRoutine)
  175. #define CallIndexToStringProc(userRoutine, item, itemsScript, itemsStringPtr, yourDataPtr) InvokeIndexToStringUPP(item, itemsScript, itemsStringPtr, yourDataPtr, userRoutine)
  176. /*
  177.  *    These routines are available in Carbon with the new names.
  178.  */
  179. #if TARGET_OS_MAC
  180.     #define MacReplaceText ReplaceText
  181. #endif
  182. EXTERN_API( short )
  183. MacReplaceText                    (Handle                 baseText,
  184.                                  Handle                 substitutionText,
  185.                                  Str15                     key)                                FOURWORDINLINE(0x2F3C, 0x820C, 0xFFDC, 0xA8B5);
  186.  
  187. EXTERN_API( short )
  188. ScriptOrder                        (ScriptCode             script1,
  189.                                  ScriptCode             script2)                            THREEWORDINLINE(0x3F3C, 0x001E, 0xA9ED);
  190.  
  191. #if TARGET_OS_MAC
  192.     #define MacCompareString CompareString
  193. #endif
  194. EXTERN_API( short )
  195. MacCompareString                (ConstStr255Param         aStr,
  196.                                  ConstStr255Param         bStr,
  197.                                  Handle                 itl2Handle);
  198.  
  199. EXTERN_API( short )
  200. IdenticalString                    (ConstStr255Param         aStr,
  201.                                  ConstStr255Param         bStr,
  202.                                  Handle                 itl2Handle);
  203.  
  204. EXTERN_API( short )
  205. StringOrder                        (ConstStr255Param         aStr,
  206.                                  ConstStr255Param         bStr,
  207.                                  ScriptCode             aScript,
  208.                                  ScriptCode             bScript,
  209.                                  LangCode                 aLang,
  210.                                  LangCode                 bLang);
  211.  
  212. EXTERN_API( short )
  213. CompareText                        (const void *            aPtr,
  214.                                  const void *            bPtr,
  215.                                  short                     aLen,
  216.                                  short                     bLen,
  217.                                  Handle                 itl2Handle)                            THREEWORDINLINE(0x3F3C, 0x001A, 0xA9ED);
  218.  
  219. EXTERN_API( short )
  220. IdenticalText                    (const void *            aPtr,
  221.                                  const void *            bPtr,
  222.                                  short                     aLen,
  223.                                  short                     bLen,
  224.                                  Handle                 itl2Handle)                            THREEWORDINLINE(0x3F3C, 0x001C, 0xA9ED);
  225.  
  226. EXTERN_API( short )
  227. TextOrder                        (const void *            aPtr,
  228.                                  const void *            bPtr,
  229.                                  short                     aLen,
  230.                                  short                     bLen,
  231.                                  ScriptCode             aScript,
  232.                                  ScriptCode             bScript,
  233.                                  LangCode                 aLang,
  234.                                  LangCode                 bLang)                                THREEWORDINLINE(0x3F3C, 0x0022, 0xA9ED);
  235.  
  236. EXTERN_API( short )
  237. LanguageOrder                    (LangCode                 language1,
  238.                                  LangCode                 language2)                            THREEWORDINLINE(0x3F3C, 0x0020, 0xA9ED);
  239.  
  240.  
  241. /*
  242.  *    These routines are available in InterfaceLib with old names.
  243.  *    Macros are provided for C to allow source code use to the new names.
  244.  */
  245. EXTERN_API( short )
  246. IUMagPString                    (const void *            aPtr,
  247.                                  const void *            bPtr,
  248.                                  short                     aLen,
  249.                                  short                     bLen,
  250.                                  Handle                 itl2Handle)                            THREEWORDINLINE(0x3F3C, 0x001A, 0xA9ED);
  251.  
  252. EXTERN_API( short )
  253. IUMagIDPString                    (const void *            aPtr,
  254.                                  const void *            bPtr,
  255.                                  short                     aLen,
  256.                                  short                     bLen,
  257.                                  Handle                 itl2Handle)                            THREEWORDINLINE(0x3F3C, 0x001C, 0xA9ED);
  258.  
  259. EXTERN_API( short )
  260. IUTextOrder                        (const void *            aPtr,
  261.                                  const void *            bPtr,
  262.                                  short                     aLen,
  263.                                  short                     bLen,
  264.                                  ScriptCode             aScript,
  265.                                  ScriptCode             bScript,
  266.                                  LangCode                 aLang,
  267.                                  LangCode                 bLang)                                THREEWORDINLINE(0x3F3C, 0x0022, 0xA9ED);
  268.  
  269. EXTERN_API( short )
  270. IULangOrder                        (LangCode                 language1,
  271.                                  LangCode                 language2)                            THREEWORDINLINE(0x3F3C, 0x0020, 0xA9ED);
  272.  
  273. EXTERN_API( short )
  274. IUScriptOrder                    (ScriptCode             script1,
  275.                                  ScriptCode             script2)                            THREEWORDINLINE(0x3F3C, 0x001E, 0xA9ED);
  276.  
  277. EXTERN_API( short )
  278. IUMagString                        (const void *            aPtr,
  279.                                  const void *            bPtr,
  280.                                  short                     aLen,
  281.                                  short                     bLen)                                THREEWORDINLINE(0x3F3C, 0x000A, 0xA9ED);
  282.  
  283. EXTERN_API( short )
  284. IUMagIDString                    (const void *            aPtr,
  285.                                  const void *            bPtr,
  286.                                  short                     aLen,
  287.                                  short                     bLen)                                THREEWORDINLINE(0x3F3C, 0x000C, 0xA9ED);
  288.  
  289. EXTERN_API( short )
  290. IUCompPString                    (ConstStr255Param         aStr,
  291.                                  ConstStr255Param         bStr,
  292.                                  Handle                 itl2Handle);
  293.  
  294. EXTERN_API( short )
  295. IUEqualPString                    (ConstStr255Param         aStr,
  296.                                  ConstStr255Param         bStr,
  297.                                  Handle                 itl2Handle);
  298.  
  299. EXTERN_API( short )
  300. IUStringOrder                    (ConstStr255Param         aStr,
  301.                                  ConstStr255Param         bStr,
  302.                                  ScriptCode             aScript,
  303.                                  ScriptCode             bScript,
  304.                                  LangCode                 aLang,
  305.                                  LangCode                 bLang);
  306.  
  307. EXTERN_API( short )
  308. IUCompString                    (ConstStr255Param         aStr,
  309.                                  ConstStr255Param         bStr);
  310.  
  311. EXTERN_API( short )
  312. IUEqualString                    (ConstStr255Param         aStr,
  313.                                  ConstStr255Param         bStr);
  314.  
  315. #if CALL_NOT_IN_CARBON
  316. #if TARGET_OS_MAC
  317.     #define CompareString(aStr, bStr, itl2Handle) \
  318.              IUCompPString(aStr, bStr, itl2Handle)
  319. #endif
  320. #ifdef MacCompareString
  321. #undef MacCompareString
  322. #endif
  323. #define MacCompareString(aStr, bStr, itl2Handle) \
  324.          IUCompPString(aStr, bStr, itl2Handle)
  325. #define CompareText(aPtr, bPtr, aLen, bLen, itl2Handle) \
  326.          IUMagPString(aPtr, bPtr, aLen, bLen, itl2Handle)
  327. #define IdenticalString(aStr, bStr, itl2Handle) \
  328.          IUEqualPString(aStr, bStr, itl2Handle)
  329. #define IdenticalText(aPtr, bPtr, aLen, bLen, itl2Handle) \
  330.          IUMagIDPString(aPtr, bPtr, aLen, bLen, itl2Handle)
  331. #define StringOrder(aStr, bStr, aScript, bScript, aLang, bLang) \
  332.          IUStringOrder(aStr, bStr, aScript, bScript, aLang, bLang)
  333. #define TextOrder(aPtr, bPtr, aLen, bLen, aScript, bScript, aLang, bLang) \
  334.          IUTextOrder(aPtr, bPtr, aLen, bLen, aScript, bScript, aLang, bLang)
  335. #define LanguageOrder(language1, language2) \
  336.          IULangOrder(language1, language2)
  337. #endif /* CALL_NOT_IN_CARBON */
  338. EXTERN_API_C( short )
  339. iucomppstring                    (const char *            aStr,
  340.                                  const char *            bStr,
  341.                                  Handle                 intlHandle);
  342.  
  343. EXTERN_API_C( short )
  344. iuequalpstring                    (const char *            aStr,
  345.                                  const char *            bStr,
  346.                                  Handle                 intlHandle);
  347.  
  348. EXTERN_API_C( short )
  349. iustringorder                    (const char *            aStr,
  350.                                  const char *            bStr,
  351.                                  ScriptCode             aScript,
  352.                                  ScriptCode             bScript,
  353.                                  LangCode                 aLang,
  354.                                  LangCode                 bLang);
  355.  
  356. EXTERN_API_C( short )
  357. iucompstring                    (const char *            aStr,
  358.                                  const char *            bStr);
  359.  
  360. EXTERN_API_C( short )
  361. iuequalstring                    (const char *            aStr,
  362.                                  const char *            bStr);
  363.  
  364.  
  365. EXTERN_API( short )
  366. RelString                        (ConstStr255Param         str1,
  367.                                  ConstStr255Param         str2,
  368.                                  Boolean                 caseSensitive,
  369.                                  Boolean                 diacSensitive);
  370.  
  371. EXTERN_API( Boolean )
  372. EqualString                        (ConstStr255Param         str1,
  373.                                  ConstStr255Param         str2,
  374.                                  Boolean                 caseSensitive,
  375.                                  Boolean                 diacSensitive);
  376.  
  377. EXTERN_API_C( short )
  378. relstring                        (const char *            str1,
  379.                                  const char *            str2,
  380.                                  Boolean                 caseSensitive,
  381.                                  Boolean                 diacSensitive);
  382.  
  383. EXTERN_API_C( Boolean )
  384. equalstring                        (const char *            str1,
  385.                                  const char *            str2,
  386.                                  Boolean                 caseSensitive,
  387.                                  Boolean                 diacSensitive);
  388.  
  389.  
  390.  
  391.  
  392. #if PRAGMA_STRUCT_ALIGN
  393.     #pragma options align=reset
  394. #elif PRAGMA_STRUCT_PACKPUSH
  395.     #pragma pack(pop)
  396. #elif PRAGMA_STRUCT_PACK
  397.     #pragma pack()
  398. #endif
  399.  
  400. #ifdef PRAGMA_IMPORT_OFF
  401. #pragma import off
  402. #elif PRAGMA_IMPORT
  403. #pragma import reset
  404. #endif
  405.  
  406. #ifdef __cplusplus
  407. }
  408. #endif
  409.  
  410. #endif /* __STRINGCOMPARE__ */
  411.  
  412.